/*
 *  \file FullBrevity.h
 *  IncrementalAlgorithm
 *
 *  Created by Roman Kutlak on 13/05/2011.
 *  Copyright 2011 Roman Kutlak. All rights reserved.
 *
 */

#ifndef FullBrevity_h 
#define FullBrevity_h

// SYSTEM INCLUDES 
#include <iostream>
#include <string>

// PROJECT INCLUDES 
#include "Algorithm.h"
#include "AlgorithmFunctions.h"
#include "KnowledgeBase.h"

#ifdef DEBUG
#define FB_DEBUG 0
#endif

namespace kutlak {
namespace roman {
namespace gre {
    
    /*!
     * \brief The class FullBrevity is an implementation of the Full Brevity Algorithm 
     * 
     */
    class FullBrevity : public Algorithm {
    public: 
#pragma mark -
#pragma mark lifecycle

        FullBrevity(const pKnowledgeBase& kb = pKnowledgeBase(),
                    const pOntology& ontology = pOntology());
        
        FullBrevity(const FullBrevity& from) = delete;
        FullBrevity& operator=(FullBrevity& from) = delete;

        virtual ~FullBrevity();
        
#pragma mark -
#pragma mark operations                
        virtual RefExp MakeReferringExpression(const EntityPtrT& referent, 
                                               ContainerT distractors);
        
        virtual RefExp MakeReferringExpression(const std::string& referentName);
    };
}
}
}
#endif // FullBrevity_h
